package com.docs.core.image;

import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;

import javax.imageio.ImageIO;
import java.awt.*;
import java.io.File;
import java.io.IOException;

public class ImgUtils {

    private static final String imgPath = "C:/Users/LENOVO/Desktop/上传文件/测试图片.jpg";

    public static void main(String[] args) throws Exception {
        ImgUtils demo = new ImgUtils();
        demo.flip();
    }

    /**
     * 缩放
     */
    public void scale(){
        String newImgPath = "C:/Users/LENOVO/Desktop/上传文件/scale.jpg";
        ImgUtil.scale(FileUtil.file(imgPath),
                FileUtil.file(newImgPath),
                0.5f);
    }

    /**
     * 裁剪
     * Rectangle:长方形
     */
    public void cat(){
        String newImgPath = "C:/Users/LENOVO/Desktop/上传文件/cat.jpg";
        ImgUtil.cut(new File(imgPath),
                new File(newImgPath),
                //左上角坐标，右下角坐标
                new Rectangle(400, 50, 800, 250));
    }

    /**
     * 按照行列裁剪
     * 将图片裁剪2行，2列
     * 有问题，裁剪的图片特别多
     */
    public void slice(){
        String dir = "C:/Users/LENOVO/Desktop/上传文件/slice";
        ImgUtil.slice(FileUtil.file(imgPath),
                FileUtil.file(dir), 1 ,1);
    }

    /**
     * 类型转换
     * jpg转png
     */
    public void convert(){
        String newImgPath = "C:/Users/LENOVO/Desktop/上传文件/convert.png";
        ImgUtil.convert(FileUtil.file(imgPath), FileUtil.file(newImgPath));
    }

    /**
     * 图片转黑白
     */
    public void gray(){
        String newImgPath = "C:/Users/LENOVO/Desktop/上传文件/gray.png";
        ImgUtil.gray(FileUtil.file(imgPath), FileUtil.file(newImgPath));
    }

    /**
     * 添加文字水印
     */
    public void pressText(){
        String newImgPath = "C:/Users/LENOVO/Desktop/上传文件/pressText.jpg";
        ImgUtil.pressText(
            FileUtil.file(imgPath),
            FileUtil.file(newImgPath),
            "版权所有", Color.WHITE, //文字
            new Font("黑体", Font.BOLD, 100), //字体
            0, //x坐标修正值。 默认在中间，偏移量相对于中间偏移
            0, //y坐标修正值。 默认在中间，偏移量相对于中间偏移
            0.8f//透明度：alpha 必须是范围 [0.0, 1.0] 之内（包含边界值）的一个浮点数字
        );
    }

    /**
     * 添加文字水印
     */
    public void pressImage(){
        String pressImagePath = "C:/Users/LENOVO/Desktop/上传文件/cat.jpg";
        String newImgPath = "C:/Users/LENOVO/Desktop/上传文件/pressImage.jpg";
        ImgUtil.pressImage(
            FileUtil.file(imgPath),
            FileUtil.file(newImgPath),
            ImgUtil.read(FileUtil.file(pressImagePath)), //水印图片
            0, //x坐标修正值。 默认在中间，偏移量相对于中间偏移
            0, //y坐标修正值。 默认在中间，偏移量相对于中间偏移
            0.8f//透明度：alpha 必须是范围 [0.0, 1.0] 之内（包含边界值）的一个浮点数字
        );
    }

    /**
     * 旋转
     */
    public void rotate() throws IOException {
        String newImgPath = "C:/Users/LENOVO/Desktop/上传文件/rotate.jpg";
        Image rotate = ImgUtil.rotate(ImageIO.read(FileUtil.file(imgPath)), 180);
        ImgUtil.write(rotate, FileUtil.file(newImgPath));
    }

    /**
     * 水平翻转
     */
    public void flip(){
        String newImgPath = "C:/Users/LENOVO/Desktop/上传文件/flip.jpg";
        ImgUtil.flip(FileUtil.file(imgPath), FileUtil.file(newImgPath));
    }
}
